package cn.iocoder.yudao.module.iot.service.user;

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.iot.controller.app.user.vo.*;
import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import jakarta.validation.Valid;

/**
 * IoT用户 Service 接口
 */
public interface IotUserService {

    /**
     * 用户登录
     *
     * @param reqVO 登录信息
     * @return 登录结果
     */
    IotUserLoginRespVO login(IotUserLoginReqVO reqVO);

    /**
     * 用户注册
     *
     * @param reqVO 注册信息
     */
    void register(IotUserRegisterReqVO reqVO);

    /**
     * 用户退出登录
     */
    void logout();

    /**
     * 获取当前用户信息
     *
     * @return 用户信息
     */
    IotUserRespVO getCurrentUserInfo();

    /**
     * 更新用户信息
     *
     * @param reqVO 用户信息
     */
    void updateUserInfo(IotUserRespVO reqVO);

    /**
     * 微信登录，并注册用户
     *
     * @param reqVO 登录信息
     * @return 登录结果
     */
    IotUserLoginRespVO loginByOpenId(WxSessionInfo sessionInfo);

    /**
     * 获得用户分页
     *
     * @param pageReqVO 分页参数
     * @return 用户分页
     */
    PageResult<AdminUserDO> getUserPage(PageParam pageReqVO);

    /**
     * 发送验证码
     *
     * @param sendCodeVO 发送验证码的参数
     * @return 验证码的编号
     */
    String sendCode(@Valid SmsCodeSendReqDTO sendCodeVO);

    /**
     * 验证码登录
     *
     * @param reqVO 登录信息
     * @return 登录结果
     */
    IotUserLoginRespVO smsLogin(@Valid IotUserLoginReq2VO reqVO);
}